#ifndef _PARTIDA_H_
#define _PARTIDA_H_
#include <SDL.h>
#include <iostream>
#include "Escenario.h"
#include "Dibujador.h"
#include "MapaDeCeldas.h"
#include "Jugador.h"
#include "CEvent.h"
#include "Fantasma.h"
#include "BonusFactory.h"
#include "UsuariosDAO.h"

using namespace std;

class Partida : public CEvent {
    private:

		//Teclas jugador 1
		static const char TeclaA = 'a'; 
		static const char TeclaS = 's';
		static const char TeclaD = 'd';
		static const char TeclaW = 'w';
		//Teclas jugador 2
		static const char TeclaFlechaArriba = 273; 
		static const char TeclaFlechaAbajo = 274;
		static const char TeclaFlechaIzquierda = 276;
		static const char TeclaFlechaDerecha = 275;

		int periodoDeRefresco; //milisegundos
		
        bool            Running;

		int frecuenciaDeAparicion;

		Escenario* escenario;

		Dibujador* dibujador;

		MapaDeCeldas* mapa;

		Jugador* jugador1;

		Jugador* jugador2;

		int tiempoJugado;
		
		Fantasma** fantasmas1;

		Fantasma** fantasmas2;

		SDL_Event evento;
		int tiempoDeEvento;

		BonusFactory* bonusFactory;

		void congelarFantasmas();

		void descongelarFantasmas();


    public:

        Partida();

		~Partida();

		Partida(Jugador* j1, Jugador* j2);

		Partida(Escenario* e);
		
		void setJugadores(Jugador*, Jugador*);

        int OnExecute();

    public:

        bool OnInit();

        void OnEvent(SDL_Event* Event);

        void OnExit();

		void OnKeyDown(SDLKey sym, SDLMod mod, Uint16 unicode);

        void OnLoop();

        void OnRender();

        void OnCleanup();

		void dibujar();


		void chequearBonus();
		void actualizarEstado();
		void actualizarPacman1();
		void actualizarPacman2();
		void inicializarFantasmas();
		void actualizarFantasmas();
		void dibujarFantasmas();
		bool terminoElJuego();
		bool cruzaPacman();
};

#endif
 